" -------------------
" | Vim 通用设置（适用于所有平台，包括 Ubuntu）|
" -------------------

" Vim with all enhancements
source $VIMRUNTIME/vimrc_example.vim

set nocompatible  "去掉讨厌的有关vi一致性模式，避免以前版本的一些bug和局限
set number        "显示行号"
set cursorline    "突出显示当前行"
set cursorcolumn  "突出显示当前列"
set showmatch     "显示括号匹配"
set tabstop=2     "设置Tab长度为2空格"
set shiftwidth=2  "设置自动缩进长度为2空格"
set autoindent    "继承前一行的缩进方式，适用于多行注释"
set listchars=tab:>-,trail:-  "Vim编辑器中默认不显示文件中的tab和空格符，通过下面的配置可以获得以下的显示效果，方便定位输入错误。"
set completeopt=preview,menu  "代码补全"
set noundofile    "不让vim自动生成~和un~后缀的文件"
set nobackup      "不让vim自动生成~和un~后缀的文件"
set nowritebackup "不生成.swp文件"
set clipboard=unnamedplus     "启用剪切板支持"

" 在插入模式下输入一个左括号 ( 后，自动插入右括号 ) 并将光标移到括号中间
inoremap ( ()<Left>
" 在插入模式下输入一个左方括号 [ 后，自动插入右方括号 ] 并将光标移到方括号中间
inoremap [ []<Left>
" 在插入模式下输入一个左大括号 { 后，自动插入右大括号 } 并将光标移到大括号中间
inoremap { {}<Left>
" 在插入模式下输入一个左引号 " 后，自动插入右引号 " 并将光标移到引号中间
inoremap " ""<Left>

" 插入模式下使用 jj 或 jk 快速返回到 normal 模式 
inoremap jj <Esc>
inoremap jk <Esc>

" 使上下移动的时候按照视觉的行数移动, 对于多行的段落很有效
nmap j gj
nmap k gk

" 快捷行首和行尾
" normal 模式使用
nmap H ^
nmap L $
" 操作模式使用, 用于 yL, dH 等操作
omap H ^
omap L $
" visual 模式使用
vmap H ^
vmap L $

colo habamax  "设置颜色方案"

"不启用windous 但是基本功能有"

" 禁用默认的 Ctrl+C 和 Ctrl+V 行为
nnoremap <C-c> <nop>
nnoremap <C-v> <nop>

" 重新映射 Ctrl+C 为复制
nnoremap <C-c> "+y
vnoremap <C-c> "+y
inoremap <C-c> <Esc>

" 重新映射 Ctrl+V 为粘贴
nnoremap <C-v> "+p
vnoremap <C-v> "+p
inoremap <C-v> <C-r>+

" 重新映射 Ctrl+S 为保存文件
nnoremap <C-s> :w<CR>
inoremap <C-s> <Esc>:w<CR>
vnoremap <C-s> <Esc>:w<CR>

" 在插入模式下按 Ctrl+A 实现全选
inoremap <C-a> <Esc>ggVG

" 保留 Ctrl+F 为搜索功能
nnoremap <C-f> /
vnoremap <C-f> :<C-u>/\%V





" -------------------
" | Windows Gvim 专用设置 |
" -------------------

" Remap a few keys for Windows behavior
"启用 windows 设置
"source $VIMRUNTIME/mswin.vim

" Mouse behavior (the Windows way)
behave mswin

" Use the internal diff if available.
" Otherwise use the special 'diffexpr' for Windows.
if &diffopt !~# 'internal'
  set diffexpr=MyDiff()
endif
function MyDiff()
  let opt = '-a --binary '
  if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
  if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
  let arg1 = v:fname_in
  if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
  let arg1 = substitute(arg1, '!', '\!', 'g')
  let arg2 = v:fname_new
  if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
  let arg2 = substitute(arg2, '!', '\!', 'g')
  let arg3 = v:fname_out
  if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
  let arg3 = substitute(arg3, '!', '\!', 'g')
  if $VIMRUNTIME =~ ' '
    if &sh =~ '\<cmd'
      if empty(&shellxquote)
        let l:shxq_sav = ''
        set shellxquote&
      endif
      let cmd = '"' . $VIMRUNTIME . '\diff"'
    else
      let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
    endif
  else
    let cmd = $VIMRUNTIME . '\diff'
  endif
  let cmd = substitute(cmd, '!', '\!', 'g')
  silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3
  if exists('l:shxq_sav')
    let &shellxquote=l:shxq_sav
  endif
endfunction

"设置字体为Monaco，大小10
set guifont=Consolas:h18

" 显示中文帮助
"语言设置
set langmenu=zn_CN.UF-8
set helplang=cn

